/*
 * 单元测例的基本框架示例
 */

/* C头文件，支持标准C库, 可以跨平台 */
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
/*
 * tests_lib.h包含了测试框架的定义
 * 可以在测例中使用断言(assertion)
 */
#include <tests_lib.h>
/*
 * 本环境支持使用<stdio.h>标准的printf
 * 但推荐使用log.h中定义的打印函数,加了spinlock保护，多核和中断中使用不会导致显示混乱
 * 详见inc/log.h
 */
#include <log.h>

static void demo_init(void)
{
    /* do sth */
}

static int demo_run(void)
{
    INFO("demo test run\n");

    ASSERT_EQ(1, 1);        /* 表达式相等*/
    ASSERT_NEQ(2, 1);       /* 表达式不相等 */
    ASSERT_TRUE(false);     /* 表达式为真, 这里给false断言就会报错 */
    ASSERT_FALSE(false);    /* 表达式为假 */

    return 0;
}

static void demo_exit(void)
{
    /* do sth */
}

DECLARE_TEST_CASE(      /* 声明了一个单元测例, 测试框架会依次调用下面的init(), run(), exit()函数 */
        demo,           /* 测例名字，不用带引号"" */
        demo_init,      /* 测例预初始化函数，若不需要可以为NULL. 比如可以把复位和时钟初始化放这里 */
        demo_run,       /* 测例执行主体函数，必须定义 */
        demo_exit       /* 测例退出函数，若不需要可以为NULL. 比如结束测例后需要关时钟 */
);
